home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The CICA Windows Explosion!
/
The CICA Windows Explosion! - Disc 2.iso
/
programr
/
dpmigcc5.zip
/
RSX
/
SOURCE
/
PROCESS.H
< prev
next >
Wrap
C/C++ Source or Header
|
1994-12-12
|
7KB
|
210 lines
/* Copyright Rainer Schnitker 92,93 */
#ifndef _RSX_PROCESS_H
#define _RSX_PROCESS_H
#define N_SIGA 30 /* signal actions per process */
#define N_FILES 40 /* open files per process */
#define N_FD 2 /* bits field for close_on_exec */
#define RSX_NFILES 100 /* RSX files for all processes */
#define DPMI_PRG_DATA 60*1024L*1024L
#define DPMI_PRG_ROOM 64*1024L*1024L
/* emx swawnve */
#define P_WAIT 0
#define P_NOWAIT 1
#define P_OVERLAY 2
#define P_DEBUG 3
#define P_SESSION 4
#define P_DETACH 5
#define P_PM 6
/* process status */
#define PS_EMPTY 0 /* free process */
#define PS_ZOMBIE 1 /* process exit, wait for father wait() */
#define PS_RUN 2 /* process running */
#define PS_STOP 3 /* process stopped */
#define PS_WAIT 4 /* process is waiting */
/* process flags */
#define PF_DEBUG 1 /* process debugged by ptrace */
#define PF_MATH_USED 2 /* 387 state saving */
#define PF_TERMIO 4 /* termio used */
#define PF_WAIT_WAIT 8 /* wait for father wait() */
#define PF_COMPRESS 16 /* compress memory for djgpp-system() call */
#define PF_SPAWN_ASYNC 32 /* async spawn */
#define PF_EMX_FILE 64 /* emx program */
#define PF_DJGPP_FILE 128 /* djgpp program */
#define PF_EXTENDER 256 /* dos extender process */
#define PF_USEDPMI10 512 /* uses DPMI 1.0 paging, etc */
#define PF_TNT_FILE 1024 /* TNT executable */
struct fpu_reg {
char sign;
char tag;
short align_fill_gcc;
long exp;
unsigned long sigl;
unsigned long sigh;
};
union i387_union {
struct i387_hard_struct {
long cwd;
long swd;
long twd;
long fip;
long fcs;
long foo;
long fos;
long st_space[20];
} hard;
struct i387_soft_struct {
long cwd;
long swd;
long twd;
long fip;
long fcs;
long foo;
long fos;
long top;
struct fpu_reg regs[8];
long res1 ;
long res2 ;
long res3 ;
} soft;
};
#include "SIGNALS.H"
#include "FS.H"
typedef struct p_tab
{
REG386 regs; /* process registers */
unsigned long sig_raised; /* signal raised y/n (bits) */
unsigned long sig_blocked; /* signal en/disabled (bits) */
unsigned long kstack; /* kernel stack */
struct sigaction sigaction[N_SIGA]; /* signal action */
struct p_tab *pptr; /* pointer to org. parent */
struct p_tab *cptr; /* pointer to last child */
UINT pid; /* process id */
UINT p_status; /* process status */
UINT p_flags; /* process flags */
UINT wait_return; /* return value for wait() */
UINT code32sel; /* code selector */
UINT data32sel; /* data selector */
unsigned long membytes; /* memory for process */
unsigned long memhandle; /* dpmi handle for memory block */
unsigned long memaddress; /* lin. address of memory block */
unsigned long text_start; /* first text address */
unsigned long text_end; /* last text address */
unsigned long data_start; /* first data address */
unsigned long data_end; /* last data address */
unsigned long bss_start; /* first bss address */
unsigned long bss_end; /* last bss address */
long filehandle; /* swapper file handle (dpmi 1.0) */
unsigned long text_off; /* offset text in file */
unsigned long data_off; /* offset data in file */
unsigned long stacksize; /* stack size */
unsigned long stack_top; /* stack top address */
unsigned long stack_down; /* stack bottom address */
unsigned long stackp32; /* stackpointer at prg start */
unsigned long init_brk; /* first brk value */
unsigned long brk_value; /* current brk value */
unsigned long entry; /* prg entry */
unsigned long pagefree; /* free memory in current page */
unsigned long uflags; /* uflags bits */
unsigned long options; /* options bits */
unsigned long time_tic; /* clock at start */
unsigned long time_alarm; /* alarm time */
struct file * filp[N_FILES]; /* file descriptors */
p_fdset close_on_exec; /* (bits) */
union i387_union npx;
} NEWPROCESS ;
typedef struct
{
unsigned long arg_off;
unsigned long env_off;
unsigned long fname_off;
unsigned short arg_sel;
unsigned short env_sel;
unsigned short fname_sel;
unsigned short arg_count;
unsigned short arg_size;
unsigned short env_count;
unsigned short env_size;
unsigned short mode;
} PROCESS_ENV ;
#define EAX (npz->regs.eax)
#define EBX (npz->regs.ebx)
#define ECX (npz->regs.ecx)
#define EDX (npz->regs.edx)
#define ESI (npz->regs.esi)
#define EDI (npz->regs.edi)
#define EBP (npz->regs.ebp)
#define ESP (npz->regs.esp)
#define EIP (npz->regs.eip)
#define ERR (npz->regs.err)
#define ESPORG (npz->regs.esporg)
#define EFLAGS (npz->regs.eflags)
#define FAULTNO ((WORD)(npz->regs.faultno))
#define CS ((WORD)(npz->regs.cs))
#define DS ((WORD)(npz->regs.ds))
#define ES ((WORD)(npz->regs.es))
#define SS ((WORD)(npz->regs.ss))
#define FS ((WORD)(npz->regs.fs))
#define GS ((WORD)(npz->regs.gs))
#define AX (* (WORD *) & npz->regs.eax)
#define BX (* (WORD *) & npz->regs.ebx)
#define CX (* (WORD *) & npz->regs.ecx)
#define DX (* (WORD *) & npz->regs.edx)
#define SI (* (WORD *) & npz->regs.esi)
#define DI (* (WORD *) & npz->regs.edi)
#define BP (* (WORD *) & npz->regs.ebp)
#define SP (* (WORD *) & npz->regs.esp)
#define IP (* (WORD *) & npz->regs.eip)
#define FLAGS (* (WORD *) & npz->regs.eflags)
#define AH (* ((BYTE *) (&npz->regs.eax) + 1))
#define BH (* ((BYTE *) (&npz->regs.ebx) + 1))
#define CH (* ((BYTE *) (&npz->regs.ecx) + 1))
#define DH (* ((BYTE *) (&npz->regs.edx) + 1))
#define AL (* (BYTE *) &npz->regs.eax)
#define BL (* (BYTE *) &npz->regs.ebx)
#define CL (* (BYTE *) &npz->regs.ecx)
#define DL (* (BYTE *) &npz->regs.edx)
#define N_PRZ 8
#define RSX_PROCESS process[0]
#define FIRST_PROCESS process[1]
#define LAST_PROCESS process[N_PRZ]
extern NEWPROCESS process[N_PRZ+1] ;
extern NEWPROCESS *npz; /* current running process */
extern unsigned current_pid;
/* process.c functions */
int send_signal ( NEWPROCESS *, int );
void switch_context(NEWPROCESS *p);
int schedule(void);
void init_this_process ( void );
int verify_illegal ( NEWPROCESS *, DWORD, DWORD );
int verify_illegal_write ( NEWPROCESS *, DWORD, DWORD );
NEWPROCESS * find_process ( unsigned );
unsigned sys_wait ( unsigned * );
int sys_waitpid(int, unsigned *);
void free_process ( NEWPROCESS * );
void clean_processtable( NEWPROCESS * );
int realmode_prg ( char *, char **, char ** );
int sys_fork ( void );
int exec32 ( unsigned int, char *, int, char **, int, char **);
void shut_down ( int );
DWORD getmem ( DWORD ,NEWPROCESS *);
int do_exit4c ( int );
#endif /* _RSX_PROCESS_H */